package com.ruoyi.common.utils;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.io.File;

/**
 * @author wangzhen  2023/11/21 18:33
 */
@Component
@Slf4j
public class DmUtils {


    /**
     * dexp逻辑备份
     *
     * @param hostip
     * @param username
     * @param password
     * @param tables
     * @param dmpName
     * @param queryParams
     * @param port
     * @param installPath
     * @param dexpFileUrl
     * @return
     */
    public static String dexpForDB(String hostip, String username, String password,
                                   String dmpName, String queryParams,
                                   String port, String installPath, String dexpFileUrl, String tables) {
        // StringBuffer command = new StringBuffer("cd ");
        StringBuffer command = new StringBuffer();
        // command.append(installPath).append(";")
        command.append(installPath).append(File.separator)
            .append("dexp ").append("USERID=").append(username).append("/").append(password).append("@")
            .append(hostip).append(":").append(port)
            .append(" FILE=").append(dmpName).append(".dmp")
            .append(" DIRECTORY=").append(dexpFileUrl)
            .append(" LOG=").append(dmpName).append(".log ")
            .append(" TABLES=").append(tables)
            .append(" QUERY=").append(queryParams)
            .append(" dummy=Y");
        return command.toString();
    }

    /**
     * dimp 逻辑导入
     *
     * @param hostip
     * @param username
     * @param password
     * @param dmpName
     * @param queryParams
     * @param port
     * @param installPath
     * @param dexpFileUrl
     * @param tables
     * @return
     */
    public static String dimpForDB(String hostip, String username, String password,
                                   String dmpName, String queryParams,
                                   String port, String installPath, String dexpFileUrl, String tables) {
        // StringBuffer command = new StringBuffer("cd ");
        StringBuffer command = new StringBuffer();
        // command.append(installPath).append(";")
        command.append(installPath).append(File.separator)
            .append("dimp ").append("USERID=").append(username).append("/").append(password).append("@")
            .append(hostip).append(":").append(port)
            .append(" FILE=").append(dmpName).append(".dmp")
            .append(" DIRECTORY=").append(dexpFileUrl)
            .append(" LOG=").append(dmpName).append(".log ")
            // 模式名
            .append(" REMAP_SCHEMA=").append(username)
            // 指定表名
            .append(" TABLES=").append(tables)
            // 导入时如果表已存在，则直接向现有表中导入数据(即增量)
            .append(" TABLE_EXISTS_ACTION=APPEND")
            // 不导入索引
            .append(" INDEXES=N")
            // 导入主键处理：OVERWRITE2：覆盖主键冲突行数据，更新原表有冲突的行（数据库必须是主键非自增插入的方式，主键自增会报错）
            .append(" primary_conflict=overwrite2")
            // dummy 交互信息不打印且按yes自动处理
            .append(" dummy=Y");
        return command.toString();
    }
}
